package test;

/**
 * @author zfj
 * @date 2021/10/16 -20:32
 */
public class Race implements Runnable{
	/**
	 * When an object implementing interface <code>Runnable</code> is used
	 * to create a thread, starting the thread causes the object's
	 * <code>run</code> method to be called in that separately executing
	 * thread.
	 * <p>
	 * The general contract of the method <code>run</code> is that it may
	 * take any action whatsoever.
	 *
	 * @see Thread#run()
	 */
	//胜利者
	private  static String winner;
	@Override
	public void run() {
		for (int i=0;i<=100;i++){
			//模拟兔子休息
			if (Thread.currentThread().getName().equals("兔子") && i%10==0){
				try {
					Thread.sleep(1);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			//判断比赛是否结束
			boolean flag=gameOver(i);
			if (flag){
				break;
			}
			System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");
		}
	}
	//判断是否完成比赛
	private boolean gameOver(int steps){
		//已经存在胜利者
		if (winner!=null){
			return true;
		}{
			if (steps>=100){
				winner=Thread.currentThread().getName();
				System.out.println("Winner is"+winner);
				return true;
			}
		}
		return false;
	}

	public static void main(String[] args) {
		Race race = new Race();
		new Thread(race,"兔子").start();
		new Thread(race,"乌龟").start();
	}
}
